package com.jccfc.springAutoWired;

import com.jccfc.iMessage.impl.EmailMessage;
import com.jccfc.iMessage.impl.MobileMessage;
import com.jccfc.iMessage.impl.ServerControlMessage;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.beans.factory.support.*;

/**
 * @Auther: qym
 * @Date: 2021/3/3 10:18
 * @Description: 在Spring项目的xml文件中配置后 可以自动注入所有的消息发送类
 */
public class AutowiredAllMessages implements BeanDefinitionRegistryPostProcessor{

    /**
     * @Auther: qym
     * @Description: 获取所有的Message类型注入到spring容器的BeanDefinition容器中
     * @Param:
     * @Return:
     * @Date: 2021/3/3 10:32
     */
    @Override
    public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry beanDefinitionRegistry) throws BeansException {
        //可以使用类加载器获取文件路径后 再通过JarURLConnection && File 的形式扫描所有Message类
        //暂时消息发送公司内使用 发送种类不多 所以直接写死 可以提高效率
        //emailMessage消息注入到BeanDefinition容器中
        if(!beanDefinitionRegistry.containsBeanDefinition("emailMessage")){
            RootBeanDefinition emailMessageDefinition = new RootBeanDefinition(EmailMessage.class);
            beanDefinitionRegistry.registerBeanDefinition("emailMessage",emailMessageDefinition);
        }
        //mobileMessage消息注入到BeanDefinition容器中
        if(!beanDefinitionRegistry.containsBeanDefinition("mobileMessage")) {
            RootBeanDefinition mobileMessageDefinition = new RootBeanDefinition(MobileMessage.class);
            beanDefinitionRegistry.registerBeanDefinition("mobileMessage", mobileMessageDefinition);
        }
        //serverControlMessage消息注入到BeanDefinition容器中
        if(!beanDefinitionRegistry.containsBeanDefinition("serverControlMessage")) {
            RootBeanDefinition serverControlDefinition = new RootBeanDefinition(ServerControlMessage.class);
            beanDefinitionRegistry.registerBeanDefinition("serverControlMessage", serverControlDefinition);
        }
    }

    /**
     * @Auther: qym
     * @Description: 暂时不需要对实例Bean做一些修改
     * @Param:
     * @Return:
     * @Date: 2021/3/3 10:31
     */
    @Override
    public void postProcessBeanFactory(ConfigurableListableBeanFactory configurableListableBeanFactory) throws BeansException {
    }

}
